home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / zugabe / va45 / visual45 / objects / form / slider.s < prev    next >
Text File  |  1998-09-06  |  17KB  |  566 lines

  1.     DATA
  2.  
  3. GWVA_FSLIDER_DEFAULT_METHODLIST:
  4.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_CREATE,GWVA_FSLIDER_PRG_CREATE
  5.  
  6.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_FORM_CLICK,GWVA_FSLIDER_PRG_CLICK
  7.  
  8.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_FSLIDER_PLUS1,GWVA_FSLIDER_PRG_PLUS1
  9.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_FSLIDER_MINUS1,GWVA_FSLIDER_PRG_MINUS1
  10.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_FSLIDER_PLUSPAGE,GWVA_FSLIDER_PRG_PLUSPAGE
  11.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_FSLIDER_MINUSPAGE,GWVA_FSLIDER_PRG_MINUSPAGE
  12.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_FSLIDER_SET_POSITION,GWVA_FSLIDER_PRG_SET_POSITION
  13.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_FSLIDER_MOVE,GWVA_FSLIDER_PRG_MOVE
  14.     GWVA_OBJ_STRUCT_METHOD_END_LIST
  15.  
  16.     TEXT
  17.  
  18. ;------------------------------------------------------------------------------
  19. ; Method name : GWVA_METHOD_FSLIDER_PLUS1
  20. ; Asm label   : GWVA_FSLIDER_PRG_PLUS1
  21. ; Description : Déplace le slider d'un élément en plus
  22. ;
  23. ; Rq  : Génère un FSLIDER_MOVE et eventuellement un MOVED.
  24. ; Rq  : Pas de gestion de l'objet RSC de P1.
  25. ;
  26. ; in  : a0.l = pointeur sur l'objet
  27. ; in  : a1.l = pointeur sur la fenêtre formulaire
  28. ; out : d6.w = GWVA_PRGRET_CONSUMED
  29. ;
  30. ; 01/05/98 : Création
  31. ;------------------------------------------------------------------------------
  32. GWVA_FSLIDER_PRG_PLUS1:
  33. ; pas de before
  34.     ;-----------------------------------;
  35.  
  36.     move.l #1,d0    ; déplacement sur d0.l
  37.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FSLIDER_MOVE
  38.  
  39.     ;-----------------------------------;
  40. ; pas d'after
  41.  
  42.     move.w #GWVA_PRGRET_CONSUMED,d6
  43.     rts
  44.  
  45. ;------------------------------------------------------------------------------
  46. ; Method name : GWVA_METHOD_FSLIDER_MINUS1
  47. ; Asm label   : GWVA_FSLIDER_PRG_MINUS1
  48. ; Description : Déplace le slider d'un élément en moins
  49. ;
  50. ; Rq  : Génère un FSLIDER_MOVE et eventuellement un MOVED.
  51. ; Rq  : Pas de gestion de l'objet RSC de M1.
  52. ;
  53. ; in  : a0.l = pointeur sur l'objet
  54. ; in  : a1.l = pointeur sur la fenêtre formulaire
  55. ; out : d6.w = GWVA_PRGRET_CONSUMED
  56. ;
  57. ; 01/05/98 : Création
  58. ;------------------------------------------------------------------------------
  59. GWVA_FSLIDER_PRG_MINUS1:
  60. ; pas de before
  61.     ;-----------------------------------;
  62.  
  63.     move.l #-1,d0    ; déplacement sur d0.l
  64.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FSLIDER_MOVE
  65.  
  66.     ;-----------------------------------;
  67. ; pas d'after
  68.  
  69.     move.w #GWVA_PRGRET_CONSUMED,d6
  70.     rts
  71.  
  72. ;------------------------------------------------------------------------------
  73. ; Method name : GWVA_METHOD_FSLIDER_PLUSPAGE
  74. ; Asm label   : GWVA_FSLIDER_PRG_PLUSPAGE
  75. ; Description : Déplace le slider d'une page en plus
  76. ;
  77. ; Rq  : Génère un FSLIDER_MOVE et eventuellement un MOVED.
  78. ; Rq  : Pas de gestion de l'objet RSC de P1P.
  79. ;
  80. ; in  : a0.l = pointeur sur l'objet
  81. ; in  : a1.l = pointeur sur la fenêtre formulaire
  82. ; out : d6.w = GWVA_PRGRET_CONSUMED
  83. ;
  84. ; 01/05/98 : Création
  85. ;------------------------------------------------------------------------------
  86. GWVA_FSLIDER_PRG_PLUSPAGE:
  87. ; pas de before
  88.     ;-----------------------------------;
  89.  
  90.     move.l GWVA_FSLIDER_OBJ_PAGESIZE(a0),d0
  91.     sub.l #1,d0        ; taille page = taille slider - 1
  92.     bgt.s .page_de_plus_1_element
  93.     moveq #1,d0 
  94. .page_de_plus_1_element:
  95.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FSLIDER_MOVE
  96.  
  97.     ;-----------------------------------;
  98. ; pas d'after
  99.  
  100.     move.w #GWVA_PRGRET_CONSUMED,d6
  101.     rts
  102.  
  103. ;------------------------------------------------------------------------------
  104. ; Method name : GWVA_METHOD_FSLIDER_MINUSPAGE
  105. ; Asm label   : GWVA_FSLIDER_PRG_MINUSPAGE
  106. ; Description : Déplace le slider d'une page en moins
  107. ;
  108. ; Rq  : Génère un FSLIDER_MOVE et eventuellement un MOVED.
  109. ; Rq  : Pas de gestion de l'objet RSC de M1P.
  110. ;
  111. ; in  : a0.l = pointeur sur l'objet
  112. ; in  : a1.l = pointeur sur la fenêtre formulaire
  113. ; out : d6.w = GWVA_PRGRET_CONSUMED
  114. ;
  115. ; 01/05/98 : Création
  116. ;------------------------------------------------------------------------------
  117. GWVA_FSLIDER_PRG_MINUSPAGE:
  118. ; pas de before
  119.     ;-----------------------------------;
  120.  
  121.     move.l GWVA_FSLIDER_OBJ_PAGESIZE(a0),d0
  122.     sub.l #1,d0        ; taille page = taille slider - 1
  123.     bgt.s .page_de_plus_1_element
  124.     moveq #1,d0 
  125. .page_de_plus_1_element:
  126.     neg.l d0
  127.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FSLIDER_MOVE
  128.  
  129.     ;-----------------------------------;
  130. ; pas d'after
  131.  
  132.     move.w #GWVA_PRGRET_CONSUMED,d6
  133.     rts
  134.  
  135. ;------------------------------------------------------------------------------
  136. ; Method name : GWVA_METHOD_FSLIDER_SET_POSITION
  137. ; Asm label   : GWVA_FSLIDER_PRG_SET_POSITION
  138. ; Description : Place le slider à une position donnée
  139. ;
  140. ; Rq  : Génère un FSLIDER_MOVE et eventuellement un MOVED.
  141. ; Rq  : La position sera corrigée si elle dépasse les limites possibles.
  142. ;
  143. ; in  : a0.l = pointeur sur l'objet
  144. ; in  : a1.l = pointeur sur la fenêtre formulaire
  145. ; in  : d0.l = position voulue ( 0 <= x < LENGTH)
  146. ; out : d6.w = GWVA_PRGRET_CONSUMED
  147. ;
  148. ; 01/05/98 : Création
  149. ;------------------------------------------------------------------------------
  150. GWVA_FSLIDER_PRG_SET_POSITION:
  151. ; pas de before
  152.     ;-----------------------------------;
  153.  
  154.     sub.l GWVA_FSLIDER_OBJ_POS(a0),d0
  155.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FSLIDER_MOVE
  156.  
  157.     ;-----------------------------------;
  158. ; pas d'after
  159.  
  160.     move.w #GWVA_PRGRET_CONSUMED,d6
  161.     rts
  162.  
  163. ;------------------------------------------------------------------------------
  164. ; Method name : GWVA_METHOD_CREATE
  165. ; Asm label   : GWVA_FSLIDER_PRG_CREATE
  166. ; Description : Création d'un objet slider
  167. ;
  168. ; Rq  : On calcule la taille du coulisseau au démarage en fonction des valeurs
  169. ; Rq  : des champs de la structure. Pas d'affichage
  170. ;
  171. ; in  : a0.l = pointeur sur l'objet
  172. ; in  : a1.l = pointeur sur la fenêtre
  173. ; in  : a2.l = pointeur sur le tree du ressource
  174. ; out : d6.w = GWVA_PRGRET_CONSUMED
  175. ;
  176. ; 26/04/98 : Création
  177. ;------------------------------------------------------------------------------
  178. GWVA_FSLIDER_PRG_CREATE:
  179.     GWVA_CHECK_OBJ_HANDLE
  180.  
  181.     ;-----------------------------------;
  182.  
  183.     save.l a1-a2
  184.     move.l a2,a1
  185.     bsr GWVA_FSLIDER_UPDATE_POS_SIZE
  186.     load.l a1-a2
  187.  
  188.     ;-----------------------------------;
  189.  
  190.     ; envoyer la méthode GWVA_METHOD_CREATED
  191.  
  192.     GWVA_EXEC_VISUAL_EVENT    #GWVA_METHOD_CREATED
  193.  
  194.     moveq #GWVA_PRGRET_CONSUMED,d6
  195.     moveq #GWVA_NO_ERROR_GENERIC,d7
  196.     rts
  197.  
  198. ;------------------------------------------------------------------------------
  199. ; Method name : GWVA_METHOD_FORM_CLICK
  200. ; Asm label   : GWVA_FSLIDER_PRG_CLICK
  201. ; Description : Méthode de traitement d'un clic dans un slider
  202. ;
  203. ; Rq  : Pas de CLICKED, mais peut générer un GWVA_METHOD_FSLIDER_MOVE
  204. ;
  205. ; in  : a0.l = pointeur sur l'objet
  206. ; in  : a1.l = pointeur sur le buffer d'entrée typé GWVA_FORM_CLICK_IN
  207. ; in  : d0.l = [ X.w | num gem.w ]
  208. ; in  : d1.l = [ Y.w | mouse button.w ]
  209. ; in  : d2.l = [ Key state.w | mouse count.w ]
  210. ; out : d6.w = GWVA_PRGRET_NOT_CONSUMED ou GWVA_PRGRET_CONSUMED
  211. ;
  212. ; 25/04/98 : Création
  213. ;------------------------------------------------------------------------------
  214. GWVA_FSLIDER_PRG_CLICK:
  215.  
  216.     GWVA_EXEC_VISUAL_EVENT    #GWVA_METHOD_ON_FORM_CLICK
  217.     cmp.w #GWVA_SEARCH_EXEC_CONSUMED,d6
  218.     beq .pas_click_car_on_click_consomme
  219.  
  220.     ;-----------------------------------;
  221.  
  222.     cmp.w GWVA_FSLIDER_OBJ_FATHER_IDX(a0),d0
  223.     bne.s .pas_deplacement_page
  224.  
  225. ; Déplacement +1 page si la souris est à droite du fils.
  226. ; Déplacement +1 page si la souris est dessous du fils.
  227.  
  228.     swap d0        ; x souris
  229.     swap d1        ; y souris
  230.  
  231.     save.l a0-a1/d0-d1
  232.     move.w GWVA_FSLIDER_OBJ_SON_IDX(a0),d0
  233.     move.l GWVA_FORM_CLICK_IN_TREE_PTR(a1),a0
  234.     bsr GWVA_RSC_RETURN_OBJ_POS_SIZE
  235.     move.w d0,d2        ; d2.w : position x
  236.     move.w d1,d3        ; d3.w : position y
  237.     load.l a0-a1/d0-d1
  238.  
  239.     bftst GWVA_FSLIDER_OBJ_PROPERTIES(a0){GWVA_FSLIDER_OLBIT_ORIENTATION:1}
  240.     beq.s .slider_horizontal1
  241.     move.w d1,d0
  242.     move.w d3,d2
  243. .slider_horizontal1:
  244.  
  245.     cmp.w d2,d0
  246.     blt.s .deplacement_m1_page
  247.  
  248.     move.l GWVA_FORM_CLICK_IN_WIND_PTR(a1),a1
  249.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FSLIDER_PLUSPAGE
  250.     bra .click_consomme
  251.  
  252. .deplacement_m1_page:
  253.     move.l GWVA_FORM_CLICK_IN_WIND_PTR(a1),a1
  254.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FSLIDER_MINUSPAGE
  255.     bra .click_consomme
  256.  
  257. .pas_deplacement_page:
  258.  
  259.     cmp.w GWVA_FSLIDER_OBJ_SON_IDX(a0),d0
  260.     bne.s .pas_deplacement_souris
  261.  
  262.     save.l a0-a1
  263.     clr.w d0
  264.     bftst GWVA_FSLIDER_OBJ_PROPERTIES(a0){GWVA_FSLIDER_OLBIT_ORIENTATION:1}
  265.     beq.s .slider_horizontal
  266.     moveq #1,d0
  267. .slider_horizontal:
  268.     graf_slidebox GWVA_FORM_CLICK_IN_TREE_PTR(a1),GWVA_FSLIDER_OBJ_FATHER_IDX(a0),GWVA_FSLIDER_OBJ_SON_IDX(a0),d0
  269.     load.l a0-a1
  270.  
  271.     move.l GWVA_FSLIDER_OBJ_LENGTH(a0),d4
  272.     sub.l GWVA_FSLIDER_OBJ_PAGESIZE(a0),d4    ; d4.l : déplacement maximal dans le père en élément
  273.     bpl.s .positif
  274.     moveq #0,d4
  275. .positif:
  276.     ext.l d0            ; d0.l : position désirée (0-1000)
  277.     moveq #0,d5
  278.     moveq #0,d6
  279.     mulu.l d0,d5:d4
  280.     add.l #1000-1,d4
  281.     addx.l d6,d5        ; on arrondi au millier supérieur
  282.     divu.l #1000,d5:d4        ; d4.l : nouvelle position du coulisseau en élément
  283.  
  284.     move.l d4,d0
  285.     move.l GWVA_FORM_CLICK_IN_WIND_PTR(a1),a1
  286.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FSLIDER_SET_POSITION
  287.  
  288.     bra .click_consomme
  289.  
  290. .pas_deplacement_souris:
  291.  
  292.     tst.w GWVA_FSLIDER_OBJ_P1_IDX(a0)
  293.     beq.s .pas_p1_idx
  294.  
  295.     cmp.w GWVA_FSLIDER_OBJ_P1_IDX(a0),d0
  296.     bne.s .pas_deplacement_p1
  297.  
  298.     bsr GWVA_FSLIDER_PROCESS_MOTION_BUTTON
  299.  
  300.     move.l GWVA_FORM_CLICK_IN_WIND_PTR(a1),a1
  301.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FSLIDER_PLUS1
  302.  
  303.     bra .click_consomme
  304.  
  305. .pas_p1_idx:
  306. .pas_deplacement_p1:
  307.  
  308.     tst.w GWVA_FSLIDER_OBJ_M1_IDX(a0)
  309.     beq.s .pas_m1_idx
  310.  
  311.     cmp.w GWVA_FSLIDER_OBJ_M1_IDX(a0),d0
  312.     bne.s .pas_deplacement_m1
  313.  
  314.     bsr GWVA_FSLIDER_PROCESS_MOTION_BUTTON
  315.  
  316.     move.l GWVA_FORM_CLICK_IN_WIND_PTR(a1),a1
  317.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FSLIDER_MINUS1
  318.  
  319.     bra .click_consomme
  320.  
  321. .pas_m1_idx:
  322. .pas_deplacement_m1:
  323.  
  324.     tst.w GWVA_FSLIDER_OBJ_P1P_IDX(a0)
  325.     beq.s .pas_p1p_idx
  326.  
  327.     cmp.w GWVA_FSLIDER_OBJ_P1P_IDX(a0),d0
  328.     bne.s .pas_deplacement_p1_page2
  329.  
  330.     bsr GWVA_FSLIDER_PROCESS_MOTION_BUTTON
  331.  
  332.     move.l GWVA_FORM_CLICK_IN_WIND_PTR(a1),a1
  333.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FSLIDER_PLUSPAGE
  334.  
  335.     bra .click_consomme
  336.  
  337. .pas_p1p_idx:
  338. .pas_deplacement_p1_page2:
  339.  
  340.     tst.w GWVA_FSLIDER_OBJ_M1P_IDX(a0)
  341.     beq.s .pas_m1p_idx
  342.     
  343.     cmp.w GWVA_FSLIDER_OBJ_M1P_IDX(a0),d0
  344.     bne.s .pas_deplacement_m1_page2
  345.  
  346.     bsr GWVA_FSLIDER_PROCESS_MOTION_BUTTON
  347.  
  348.     move.l GWVA_FORM_CLICK_IN_WIND_PTR(a1),a1
  349.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FSLIDER_MINUSPAGE
  350.  
  351.     bra .click_consomme
  352.  
  353. .pas_m1p_idx:
  354. .pas_deplacement_m1_page2:
  355.  
  356. ; pas concerne par ce message
  357.  
  358.     moveq #GWVA_PRGRET_NOT_CONSUMED,d6
  359.     rts
  360.  
  361. .click_consomme:
  362. .pas_click_car_on_click_consomme:
  363.     moveq #GWVA_PRGRET_CONSUMED,d6
  364.     rts
  365.  
  366. ;------------------------------------------------------------------------------
  367. ; Method name : GWVA_METHOD_FSLIDER_MOVE
  368. ; Asm label   : GWVA_FSLIDER_PRG_MOVE
  369. ; Description : Méthode de gestion du mouvement du slider
  370. ;
  371. ; Rq  : MOVED si le slider a bougé. Pas les même paramètres en entrée.
  372. ;
  373. ; in  : a0.l = pointeur sur l'objet
  374. ; in  : a1.l = pointeur sur la fenêtre formulaire
  375. ; in  : d0.l = déplacement du slider en nombre d'élément
  376. ; out : d6.w = GWVA_PRGRET_CONSUMED
  377. ;
  378. ; 26/04/98 : Création
  379. ;------------------------------------------------------------------------------
  380. GWVA_FSLIDER_PRG_MOVE:
  381.  
  382.     GWVA_EXEC_VISUAL_EVENT    #GWVA_METHOD_ON_FSLIDER_MOVE
  383.     cmp.w #GWVA_SEARCH_EXEC_CONSUMED,d6
  384.     beq .pas_move_car_on_move_consomme
  385.  
  386.     ;-----------------------------------;
  387.  
  388.     move.l GWVA_WRSC_OBJ_TREE_PTR(a1),a2    ; a2.l : pointeur sur le tree
  389.  
  390.     move.l GWVA_FSLIDER_OBJ_LENGTH(a0),d4
  391.     sub.l GWVA_FSLIDER_OBJ_PAGESIZE(a0),d4
  392.     bpl.s .positif1
  393.     moveq #0,d4
  394. .positif1:                ; d4.l : position maximale du slider
  395.  
  396.     move.l GWVA_FSLIDER_OBJ_POS(a0),d5
  397.     add.l d0,d5
  398.     bge.s .position_positive
  399.     moveq #0,d5
  400. .position_positive:
  401.     cmp.l d5,d4
  402.     bge.s .position_possible
  403. ;    move.l GWVA_FSLIDER_OBJ_POS(a0),d5
  404.     move.l d4,d5
  405. .position_possible:            ; d5.l : position voulue
  406.  
  407.     move.l d5,d3
  408.     sub.l GWVA_FSLIDER_OBJ_POS(a0),d3    ; d3.l = 0 : pas de déplacement physique
  409.     move.l d5,GWVA_FSLIDER_OBJ_POS(a0)    ; d5.l : position actuelle du slider
  410.  
  411.     save.l d3/d5/a1
  412.     move.l a2,a1
  413.     bsr GWVA_FSLIDER_UPDATE_POS_SIZE
  414.     load.l d3/d5/a1
  415.  
  416.     tst.w d0
  417.     beq.s .pas_changement_graphique_slider
  418.  
  419.     save.l d3/d5/a0-a2
  420.     lea GWVA_FSLIDER_TMP_OBJ_REDRAW_LIST,a2
  421.     move.w GWVA_FSLIDER_OBJ_FATHER_IDX(a0),(a2)
  422.     move.w #7,2(a2)    ; on veut redrawer tout l'arbre
  423.     move.w #GWVA_WRSC_CTE_REDRAW_PART_END_LIST,4(a2)
  424.     move.l a1,a0
  425.     move.l a2,a1
  426.     GWVA_CALL_METHOD_OTHER_OBJ #GWVA_METHOD_WRSC_REDRAW_PART_CONTENTS
  427.     load.l d3/d5/a0-a2
  428.  
  429. .pas_changement_graphique_slider:
  430.  
  431.     move.l GWVA_FSLIDER_OBJ_POS(a0),d7    ; nouvelle position corrigée
  432.     sub.l d5,d7            ; déplacement par rapport à la position non corrigée
  433.     add.l d7,d3            ; d3.l : déplacement effectif du slider (physique + correction graphique)
  434.  
  435.     tst.l d3
  436.     beq.s .pas_deplacement_slider
  437.  
  438.     move.l GWVA_FSLIDER_OBJ_POS(a0),d0    ; position
  439.     move.l d3,d1        ; déplacement
  440.     ; a1.l pointeur sur la fenêtre
  441.     GWVA_EXEC_VISUAL_EVENT #GWVA_METHOD_FSLIDER_MOVED
  442.  
  443. .pas_deplacement_slider:
  444.  
  445. .pas_move_car_on_move_consomme:
  446.     moveq #GWVA_PRGRET_CONSUMED,d6
  447.     rts
  448.  
  449. ;------------------------------------------------------------------------------
  450. ; Method name : 
  451. ; Asm label   : GWVA_FSLIDER_PROCESS_MOTION_BUTTON
  452. ; Description : Traitement du click sur les boutons du slider
  453. ;
  454. ; Rq  : Préserve a1-a2.l
  455. ;
  456. ; in  : a0.l = pointeur sur l'objet
  457. ; in  : a1.l = pointeur sur le buffer d'entrée typé GWVA_FORM_CLICK_IN
  458. ; in  : d0.l = [ X.w | num gem.w ]
  459. ; in  : d1.l = [ Y.w | mouse button.w ]
  460. ; in  : d2.l = [ Key state.w | mouse count.w ]
  461. ;
  462. ; 01/05/98 : Création
  463. ;------------------------------------------------------------------------------
  464. GWVA_FSLIDER_PROCESS_MOTION_BUTTON:
  465.  
  466.     save.l a1-a2
  467.  
  468.     lea GWVA_FSLIDER_TMP_IN_BUF,a3
  469.     move.l GWVA_FORM_CLICK_IN_WIND_PTR(a1),GWVA_FORM_BUTTON_IN_WIND_PTR(a3)
  470.     move.l GWVA_FORM_CLICK_IN_TREE_PTR(a1),GWVA_FORM_BUTTON_IN_TREE_PTR(a3)
  471.  
  472.     move.l a3,a1
  473.     lea GWVA_FSLIDER_TMP_OUT_BUF,a2
  474. ; + d0-d2 passés en entrée
  475.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FORM_BUTTON
  476.  
  477.     load.l a1-a2
  478.  
  479.     rts
  480.  
  481. ;------------------------------------------------------------------------------
  482. ; Method name : 
  483. ; Asm label   : GWVA_FSLIDER_UPDATE_POS_SIZE
  484. ; Description : Mise à jour de la position et de la taille graphique du slider
  485. ;
  486. ; Rq  : La position structurelle du slider (POS) peut avoir changé après cette 
  487. ; Rq  : fonction.
  488. ; Rq  : Pas d'affichage par cette routine.
  489. ; Rq  : a0-a1.l non modifiés
  490. ;
  491. ; in  : a0.l = pointeur sur l'objet
  492. ; in  : a1.l = pointeur sur le tree du ressource
  493. ; out : d0.w = 0 pas de changement graphique à faire, <> 0 réaffichage à faire
  494. ;
  495. ; 26/04/98 : Création
  496. ;------------------------------------------------------------------------------
  497. GWVA_FSLIDER_UPDATE_POS_SIZE:
  498.  
  499.     move.w GWVA_FSLIDER_OBJ_SON_IDX(a0),d2
  500.     mulu #L_OBJECT,d2
  501.     lea (a1,d2.l),a4    ; pointeur sur l'objet RSC fils = coulisseau
  502.  
  503.     move.w GWVA_FSLIDER_OBJ_FATHER_IDX(a0),d2
  504.     mulu #L_OBJECT,d2
  505.     lea (a1,d2.l),a5    ; pointeur sur l'objet RSC père = glissière
  506.  
  507.     move.w #ob_x,d2
  508.     move.w #ob_width,d3
  509.     bftst GWVA_FSLIDER_OBJ_PROPERTIES(a0){GWVA_FSLIDER_OLBIT_ORIENTATION:1}
  510.     beq.s .slider_horizontal
  511.     move.w #ob_y,d2
  512.     move.w #ob_height,d3
  513. .slider_horizontal:
  514.  
  515.     move.l GWVA_FSLIDER_OBJ_LENGTH(a0),d5    ; taille structurelle de la glisière
  516.  
  517.     move.w (a5,d3.w),d4        ;  taille graphique de la glissière
  518.     ext.l d4
  519.     mulu.l GWVA_FSLIDER_OBJ_PAGESIZE(a0),d6:d4
  520.     divu.l d5,d6:d4    ; d4.w : taille page / taille glissière * taille graphique glissière = taille graphique coulisseau
  521.  
  522.     move.w d4,d0
  523.     sub.w (a4,d3.w),d0    ; d0.w = 0 : pas de changement de taille graphique du coulisseau
  524.  
  525.     move.w d4,(a4,d3.w)        ; nouvelle taille graphique du coulisseau
  526.  
  527.     move.w (a5,d3.w),d4        ;  taille père
  528.     sub.w (a4,d3.w),d4        ;- taille fils = d4.w : deplacement graphique possible du fils dans le père
  529.     ble .pas_de_place_pour_deplacement
  530.  
  531.     move.l GWVA_FSLIDER_OBJ_LENGTH(a0),d5
  532.     sub.l GWVA_FSLIDER_OBJ_PAGESIZE(a0),d5    ; d5.l : déplacement structurelle possible du fils dans le père
  533.     ble .pas_de_place_pour_deplacement
  534.  
  535.     ext.l d4
  536.     mulu.l GWVA_FSLIDER_OBJ_POS(a0),d6:d4
  537.     divu.l d5,d6:d4            ; d4.w : nouvelle position grphique du coulisseau dans la glissière
  538.  
  539.     move.w d4,d3
  540.     sub.w (a4,d2.w),d3        ; d3.w = 0 : pas de déplacement graphique du coulisseau
  541.  
  542.     move.w d4,(a4,d2.w)        ; nouvelle position graphique du fils
  543.  
  544.     or.w d3,d0
  545.  
  546. .update_affichage_slider:
  547.  
  548.     rts
  549.  
  550. .pas_de_place_pour_deplacement:
  551.     move.w d4,d0
  552. *    move.w (a5,d3.w),d0
  553. *    sub.w (a4,d3.w),d0
  554.     move.w (a5,d3.w),(a4,d3.w)    ;  taille fils = taille père
  555.     clr.w (a4,d2.w)        ;  pos fils = 0
  556.     clr.l GWVA_FSLIDER_OBJ_POS(a0)    ; on corrige la position structurelle
  557.     bra .update_affichage_slider
  558.  
  559. ;------------------------------------------------------------------------------
  560.  BSS
  561. GWVA_FSLIDER_TMP_IN_BUF:    ds.b GWVA_FORM_BUTTON_IN_STRUCT_LENGTH
  562. GWVA_FSLIDER_TMP_OUT_BUF:    ds.b GWVA_FORM_BUTTON_OUT_STRUCT_LENGTH
  563. GWVA_FSLIDER_TMP_OBJ_REDRAW_LIST:    ds.w 2+1
  564.  TEXT
  565. ;------------------------------------------------------------------------------
  566.